package com.aikg.kgrag_java.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ChineseSentenceSplitter {

    private final int maxLength;  // 每个句子的最大长度

    // 构造函数，传入最大句子长度
    public ChineseSentenceSplitter(int maxLength) {
        this.maxLength = maxLength;
    }

    public List<String> splitText(String text) {
        List<String> result = new ArrayList<>();

        int start = 0;
        int length = text.length();

        while (start < length) {
            // 确保不会超过最大长度
            int end = Math.min(start + maxLength, length);

            // 如果不是最后一段，查找最近的标点符号
            if (end < length) {
                int lastPunctuationIndex = findLastPunctuationIndex(text, start, end);
                if (lastPunctuationIndex != -1) {
                    end = lastPunctuationIndex + 1;  // 包含标点符号
                }
            }

            result.add(text.substring(start, end).trim());

            // 更新起始位置
            start = end;
        }

        return result;
    }

    /**
     * 查找从start到end之间的最后一个标点符号的索引
     * @param text 完整文本
     * @param start 起始索引
     * @param end 结束索引
     * @return 最后一个标点符号的索引，未找到返回-1
     */
    private int findLastPunctuationIndex(String text, int start, int end) {
        // 标点符号集，可以扩展
        String punctuation = "。！？”";

        // 处理子字符串并反向查找标点符号
        String subText = text.substring(start, end);
        for (int i = subText.length() - 1; i >= 0; i--) {
            if (punctuation.indexOf(subText.charAt(i)) != -1) {
                return start + i;  // 返回原文本中的索引
            }
        }

        return -1;  // 没有找到标点符号
    }

//    private final int maxLength;  // 每个句子的最大长度
//
//    // 构造函数，传入最大句子长度
//    public ChineseSentenceSplitter(int maxLength) {
//        this.maxLength = maxLength;
//    }
//
//    public List<String> splitText(String text) {
//        List<String> result = new ArrayList<>();
//
//        int start = 0;
//        int length = text.length();
//
//        while (start < length) {
//            int end = Math.min(start + maxLength, length);
//
//            // 检查当前切分点，确保不会截断句子
//            if (end < length) {
//                // 向后查找最近的标点符号
//                int lastPunctuationIndex = findLastPunctuationIndex(text, start, end);
//                if (lastPunctuationIndex != -1) {
//                    end = lastPunctuationIndex + 1; // 包含标点符号
//                }
//            }
//
//            // 添加切分后的文本块
//            result.add(text.substring(start, end).trim());
//
//            // 更新开始位置
//            start = end;
//        }
//
//        return result;
//    }
//
//    // 查找从start到end之间的最后一个标点符号
//    private int findLastPunctuationIndex(String text, int start, int end) {
//        String punctuation = "。！？";
//        for (int i = end - 1; i >= start; i--) {
//            if (punctuation.indexOf(text.charAt(i)) != -1) {
//                return i;
//            }
//        }
//        return -1;
//    }


}
